package com.copa.l704;

/**
 * @author copa
 * @createDate 2022-06-22 16:05
 * @function 二分查找法
 */
public class Test1 {

    public int search(int[] nums, int target) {
        // 定义左指针
        int left = 0;
        // 定义右指针
        int right = nums.length - 1;
        int mid;
        while (left <= right) {
            // 定义中间点
            mid = left + (right - left) / 2;
            if (nums[mid] > target) {
                // 如果mid对应的值比target还大，那么[mid,right]的值绝对大于target，那么此区间不用遍历了，直接把右指针调整为mid - 1
                right = mid - 1;
            } else if (nums[mid] < target) {
                // 如果mid对应的值比target还小，那么[left,mid]的值绝对小于target，那么此区间不用遍历了，直接把左指针调整为mid + 1
                left = mid + 1;
            } else {
                // 如果mid对应的值与target相等，则直接返回mid
                return mid;
            }
        }
        // 若在nums数组中没找到对应的target，则返回-1
        return -1;
    }

    public static void main(String[] args) {
        int[] nums = {-1, 0, 3, 5, 9, 12};
        System.out.println(new Test1().search(nums, 9));
    }
}
